package IO;

import java.io.*;
import java.net.URL;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class FileUtils {
    public static void saveImage(String url, String savePath)throws IOException {
        LocalDateTime datetime = LocalDateTime.now();//获取时间
        DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");//按正确格式显示
        String log = "时间:" + datetime.format(fmt) + " 图片URL:" + url + " 保存地址:" + savePath;//定义log


        //下载图片到指定位置
        URL imageUrl = new URL(url);//将字符串转换为URL对象，方便进行后续操作
        ensureDirectoryExists(savePath);//判断地址是否存在若不存在就创建
        try (InputStream in = imageUrl.openStream();//获得输入流
             FileOutputStream out = new FileOutputStream(savePath)) {//创建一个文件输出流，用来将数据写入到指定路径的文件中
            byte[] buffer = new byte[1024];//创建缓冲区
            int bytesRead;
            while ((bytesRead = in.read(buffer)) != -1) {//in.read(buffer)从read中读取数据并写入buffer,同时将读取的字节数赋值给bytesRead
                out.write(buffer, 0, bytesRead);//将 buffer 中的数据写入到输出流 out 中,从第0个字节写起，每次写bytesRead
            }
            System.out.println("图片已经下载");
        }

        appendLog(log);//调用append函数，将图片下载信息写入download_log文件中


    }

    public static void ensureDirectoryExists(String dirPath)throws IOException{
        File outFile = new File(dirPath);//创建一个file对象，用来表示文件地址
        File dirs = outFile.getParentFile();//获取文件的父目录
//        dirs.mkdirs();
        if (dirs != null && !dirs.mkdirs() && !dirs.isDirectory()) {//判断对象不为空、创建失败、且路径不是目录等异常
            throw new IOException("目录创建失败: " + dirs.getAbsolutePath());
        }

    }

    public static void appendLog(String log){
        try (FileWriter w = new FileWriter("\\download_log.txt", true)) { // true=追加
            w.write(log+"\n");
            w.flush(); // 立即刷盘

            System.out.println("已经将图片下载信息写入日志文件中写入");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
